<?php
namespace api\blog\middleware;

use Firebase\JWT\ExpiredException;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use Firebase\JWT\SignatureInvalidException;

class ApiCheckToken
{
    //定义路由中间件，用来验证token，进行身份认证
    public function handle($request,\Closure $next)
    {
            // 此 key 必须和生成 token 时的一致。
            // 接收客户端提交的 token 。
//            $token = input('token/s');
            $header = request()->header();
            if(!isset($header['token']) || empty($header['token'])){
               return error('缺少 token 参数');
            }
        $key = new Key(config('app.jwt_key'), 'HS256');
        try {

//            halt((array)$test);
           $res = JWT::decode($header['token'],$key);
//           halt($res);
        } catch (SignatureInvalidException $signatureInvalidException) {
            // 获取验证失败时抛出的错误信息
            return error($signatureInvalidException->getMessage());
        } catch (ExpiredException $expiredException) {
            // 获取 token 过期时抛出的错误信息
            return error($expiredException->getMessage());
        }

        $request->userId = $res->data->user_id;
        return $next($request);
    }
}